2023/12/231246字符
BigInt
- 兼容性差(chrome+67、opera+54,edge和safari还没有实现,firefox默认不支持)
let bigint = BigInt(10n); // 与 symbol 一样不能 new
9007199254740993; //--> 9007199254740992
9007199254740993n; //--> 9007199254740993n
BigInt('9007199254740993'); //--> 9007199254740993n 不加引号数值还会有偏差
BigInt(false); //--> 0n 不支持 null、undefined、小数、字符串
typeof 10n; //--> bigint
10n + 20n; //--> 30n 除一元加号 + 运算符外,所有运算符都可用于 BigInt
10n == 10; //--> true
10n === 10; //--> false
隐式类型转换
10 + 10n; //--> TypeError number 类型与 bigint 类型不能执行算术操作
typeof (10 + Number(10n)); //--> number
[3n, 4, 2, 1n, 0, -1n].sort(); //--> [-1n, 0, 1n, 2, 3n, 4] 排序不会发生类型转换
API
import JSBI from './jsbi.mjs';
const b1 = JSBI.BigInt(Number.MAX_SAFE_INTEGER);
const b2 = JSBI.BigInt('10');
const result = JSBI.add(b1, b2);
console.log(String(result));
使用 BigInt 的一个优点是,一旦浏览器支持,就不需要重写代码。相反,可以使用 babel 插件自动将 JSBI 代码编译为原生 BigInt 代码